基于esp32+红外模块实现简易的寻迹小车 | 您所在的位置:网站首页 › esp8266 红外模拟 › 基于esp32+红外模块实现简易的寻迹小车 |
需要用到的硬件
此项目需要用到的硬件设备有Esp32芯片、3-5V电源模块、电机驱动模块、孔面包板、电机马达、3.7V锂离子充电电池、杜邦线、红外模块、舵机 小车固件各位可以去某宝搜索智能小车,各式各样的小车供以选择。 软件开发环境开发软件:Arduion IDE 搭建有esp32开发环境 实现功能此次项目要实现的主要功能就是:用PWM驱动四个电机,并能调速,实现转向功能;安装红外对管模块,实现红外循迹功能,能走8字; 主要代码代码需要根据大家的连线更改端口号,在不同硬件也需要更改不同的参数。(大家在烧写代码的时候一定要关闭小车电源,不然很容易烧坏芯片) #include int La, Lb, Ra,Med, Rb; int val = 0; Servo servo; int SERVO_PIN = 13; int IN1=25,IN2=33,IN3=27,IN4=26,R1=2,R2=4,R3=16,R4=5,R5=17;//定义端口 //int IN1=25,IN2=33,IN3=27,IN4=26,ENA=18,ENB=19,R1=2,R2=4,R3=16,R4=5,R5=17;//定义端口 void turnleft(); void turnright(); void straight(); void straightturnright(); void straightturnleft(); void setup() { pinMode(IN1, OUTPUT);//右 pinMode(IN2, OUTPUT);//右 pinMode(IN3, OUTPUT);//左 pinMode(IN4, OUTPUT);//左 //pinMode(ENA, OUTPUT); //pinMode(ENB, OUTPUT); pinMode(R1, INPUT); pinMode(R2, INPUT); pinMode(R3, INPUT); pinMode(R4, INPUT); pinMode(R5, INPUT); ledcSetup(5, 12000, 8); ledcSetup(6, 12000, 8); servo.attach(SERVO_PIN); } void straight() { digitalWrite(IN1, HIGH);//控制右轮滚动 digitalWrite(IN2, LOW);//右边轮胎前进后退,H后退,L前进 digitalWrite(IN3, LOW);//控制左轮前进后退 digitalWrite(IN4, HIGH);//控制左轮滚动 } void straightturnleft() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } void straightturnright() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } void turnleft() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } void turnright() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } //逻辑函数 void loop() { La = digitalRead(R1); Lb = digitalRead(R2); Med = digitalRead(R3); Ra = digitalRead(R4); Rb = digitalRead(R5); if (La == 1 && Lb == 1 && Med == 0 && Ra == 1 && Rb == 1) { straight(); servo.write(90); } if (La == 1 && Lb == 0 && Med == 1 && Ra == 1 && Rb == 1) { straightturnright(); servo.write(70); } if (La == 0 && Lb == 1 && Med == 1 && Ra == 1 && Rb == 1) {//左一 turnleft(); servo.write(60); analogWrite(IN4,100); analogWrite(IN1,160); } if (La == 1 && Lb == 1 && Med == 1 && Ra == 0 && Rb == 1) { straightturnleft(); servo.write(110); } if (La == 1 && Lb == 1 && Med == 1 && Ra == 1 && Rb == 0) {//左二 turnright(); servo.write(130); analogWrite(IN4,160); analogWrite(IN1,100); } } 展示图片 |
CopyRight 2018-2019 实验室设备网 版权所有 |